package com.liu.designmode.proxy.binding;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class ProxyFactory {


    /**
     * 可以传递需要被MapperProxy增强的接口
     * @param clz
     * @return
     * @param <T>
     * @throws InstantiationException
     * @throws IllegalAccessException
     */
    public static <T> T getProxy(Class<T> clz) {
        /**
         * 参数1：类加载器
         * 参数2：增强方法所在的类，这个类实现的接口，表示这个代理类可以执行哪些方法
         * 参数3：实现InvocationHandler接口的代理类
         */
        return (T) Proxy.newProxyInstance(clz.getClassLoader(), new Class[]{clz}, new MapperProxy());
    }
}
